Structs এর ধারণা এবং ব্যবহার

Structures (স্ট্রাকচারস) - রাস্ট (Rust) - Computer Programming

249

Structs কী?

রাস্টে struct (স্ট্রাক্ট) হল একটি কাস্টম ডেটা টাইপ যা এক বা একাধিক ভ্যালু (ফিল্ড) ধারণ করতে পারে। স্ট্রাক্টের মাধ্যমে আপনি সম্পর্কিত ডেটা একত্রে গ্রুপ করতে পারেন, যা কোডকে আরও সংগঠিত এবং রক্ষণাবেক্ষণযোগ্য করে তোলে।

স্ট্রাক্ট হল সাধারণত ডেটা-কন্টেইনার যেগুলো ভেরিয়েবল ও ডেটার গ্রুপ হিসাবে ব্যবহৃত হয়। এটি ঐতিহ্যগতভাবে অন্যান্য ভাষায় ক্লাস এর মতো কাজ করে, তবে এটি সি বা সি++ এর মতো ভাষায় কমপ্লেক্স ক্লাস স্ট্রাকচারের বিকল্প।

স্ট্রাক্ট ডিফাইন করা (Defining a Struct)

রাস্টে স্ট্রাক্ট ডিফাইন করার জন্য struct কিওয়ার্ড ব্যবহার করা হয়। স্ট্রাক্টের ভিতরে বিভিন্ন ধরনের ডেটা টাইপ ধারণ করা যেতে পারে, যেমন ইন্টিজার, স্ট্রিং, বুলিয়ান ইত্যাদি।

স্ট্রাক্ট ডিফাইন করার উদাহরণ:

struct Person {
    name: String,
    age: u32,
}

এখানে Person নামের একটি স্ট্রাক্ট ডিফাইন করা হয়েছে যা দুটি ফিল্ড ধারণ করে: name (যেটি String টাইপের) এবং age (যেটি u32 টাইপের)।

স্ট্রাক্ট ইন্সট্যান্স তৈরি করা (Creating an Instance of a Struct)

স্ট্রাক্টের ইন্সট্যান্স তৈরি করতে, স্ট্রাক্টের নাম লিখে এবং ফিল্ডগুলির মান দিতে হয়।

উদাহরণ:

fn main() {
    let person1 = Person {
        name: String::from("Alice"),
        age: 30,
    };
    println!("Name: {}, Age: {}", person1.name, person1.age);
}

এখানে person1 একটি স্ট্রাক্টের ইন্সট্যান্স, যেখানে name ফিল্ডে "Alice" এবং age ফিল্ডে 30 প্রদান করা হয়েছে। এইভাবে স্ট্রাক্টের মান অ্যাক্সেস করা যায়।

struct এর methods (স্ট্রাক্টের মেথডস)

রাস্টে স্ট্রাক্টে মেথড যোগ করা যেতে পারে, যা স্ট্রাক্টের ডেটার সাথে কাজ করে। স্ট্রাক্টের মেথডগুলোকে সাধারণত impl (implementation) ব্লকে ডিফাইন করা হয়।

উদাহরণ:

struct Person {
    name: String,
    age: u32,
}

impl Person {
    fn greet(&self) {
        println!("Hello, my name is {} and I am {} years old.", self.name, self.age);
    }

    fn is_adult(&self) -> bool {
        self.age >= 18
    }
}

fn main() {
    let person1 = Person {
        name: String::from("Alice"),
        age: 30,
    };
    
    person1.greet();
    
    if person1.is_adult() {
        println!("{} is an adult.", person1.name);
    } else {
        println!("{} is not an adult.", person1.name);
    }
}

এখানে Person স্ট্রাক্টের জন্য দুটি মেথড রয়েছে:

  • greet(): এটি name এবং age ফিল্ড ব্যবহার করে একটি স্বাগতম বার্তা প্রিন্ট করে।
  • is_adult(): এটি age ফিল্ড চেক করে যে ব্যক্তি বড় (১৮ বছর বা তার বেশি) কিনা।

&self অর্থাৎ স্ট্রাক্টের বর্তমান ইন্সট্যান্সটিকে মেথডের মধ্যে পাঠানো হয়, যা স্ট্রাক্টের ডেটার উপর কাজ করতে সক্ষম হয়।

স্ট্রাক্টের ডিফল্ট মান (Default Values for Structs)

রাস্টে আপনি স্ট্রাক্টের জন্য ডিফল্ট মানও নির্ধারণ করতে পারেন, যদি আপনি স্ট্রাক্টটি নির্মাণ করার সময় কিছু ফিল্ডের জন্য মান না দেন।

উদাহরণ:

#[derive(Default)]
struct Person {
    name: String,
    age: u32,
}

fn main() {
    let person1 = Person {
        name: String::from("Alice"),
        ..Default::default()  // বাকি ফিল্ডগুলো ডিফল্ট মান নেবে
    };
    println!("Name: {}, Age: {}", person1.name, person1.age);
}

এখানে Default ট্রেইট (derive দিয়ে) ব্যবহার করে স্ট্রাক্টের ডিফল্ট মান নির্ধারণ করা হয়েছে। আপনি শুধু name সেট করছেন, এবং age ফিল্ডটি ডিফল্ট মান (যেমন 0) নিবে।

স্ট্রাক্টের আংশিক আপডেট (Partial Updates)

রাস্টে স্ট্রাক্টের একটি ইন্সট্যান্স তৈরি করার সময়, আপনি কিছু ফিল্ড আপডেট করতে পারেন এবং বাকি ফিল্ডগুলি আগের মান থেকে রেখে দিতে পারেন।

উদাহরণ:

fn main() {
    let person1 = Person {
        name: String::from("Alice"),
        age: 30,
    };

    let person2 = Person {
        age: 35, // শুধু age আপডেট করা হয়েছে
        ..person1  // বাকি ফিল্ড গুলি person1 থেকে আসবে
    };

    println!("Name: {}, Age: {}", person2.name, person2.age);
}

এখানে person1 থেকে person2 তৈরি করার সময় শুধু age আপডেট করা হয়েছে, আর বাকি ফিল্ডগুলি person1 এর মান নিয়েছে।

Tuple Structs (টিউপল স্ট্রাক্ট)

রাস্টে আপনি tuple structsও তৈরি করতে পারেন, যেখানে ফিল্ডগুলোর নাম থাকে না, শুধুমাত্র তাদের অর্ডার থাকে। এগুলো সাধারণ স্ট্রাক্টের মতোই কাজ করে, তবে ফিল্ডের নামের পরিবর্তে ইনডেক্স ব্যবহার করা হয়।

উদাহরণ:

struct Color(i32, i32, i32);

fn main() {
    let black = Color(0, 0, 0);
    println!("Black color: {}, {}, {}", black.0, black.1, black.2);
}

এখানে Color একটি টিউপল স্ট্রাক্ট, যা তিনটি i32 মান ধারণ করে। ফিল্ডগুলো black.0, black.1 এবং black.2 দিয়ে অ্যাক্সেস করা হয়।

সারাংশ

রাস্টে স্ট্রাক্টস ডেটার সংগঠন এবং পরিচালনার জন্য একটি শক্তিশালী পদ্ধতি। এটি সম্পর্কিত ডেটাকে একত্রে গ্রুপ করতে এবং কোডের পুনঃব্যবহারযোগ্যতা ও সুসংগঠন নিশ্চিত করতে সাহায্য করে। স্ট্রাক্টের মাধ্যমে আপনি উন্নত ডেটা মডেল তৈরি করতে পারেন এবং মেথড ব্যবহার করে কোডের কার্যকারিতা বৃদ্ধি করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...